#!/usr/bin/env python2.5
#  $Id: pybpf.py 7557b5d4d82b 2012/12/02 09:07:16 pgurumur $ 
# 
#  Copyright (c) 2006, 2007, 2008 Prabhu Gurumurthy <pgurumur@gmail.com>
# 
#  Permission to use, copy, modify, and distribute this software for any
#  purpose with or without fee is hereby granted, provided that the above
#  copyright notice and this permission notice appear in all copies.
# 
#  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
#  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
#  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
#  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
#  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
#  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
#  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
# 

import _bpf

class bpfError(Exception):
   pass

class bpf(object):
   def __init__(self, Immediate = 0):
      self._bpfError = bpfError()
      self._bpf = None

      try:
         self._bpf = _bpf.start(Immediate)
      except _bpf.error, message:
         raise bpfError, message

   def Close(self):
      self._bpf.stop()

   def GetDataLink(self):
      try:
         dl = self._bpf.get_dl()
      except _bpf.error, message:
         raise bpfError, message

      return dl

   def GetIf(self):
      try:
         return self._bpf.get_if()
      except _bpf.error, message:
         raise bpfError, message

   def SetIf(self, Intf):
      retval = 0
      if Intf:
         try:
            retval = self._bpf.set_if(Intf)
         except _bpf.error, message:
            raise bpfError, message

   def GetStats(self):
      return self._bpf.get_stats()

   def GetDataLinkList(self):
      list = self._bpf.get_dl_list()
      return list

if __name__ == "__main__":
   filter = bpf()
   filter.SetIf("nfe0")
   print "interface: %s" %filter.GetIf()
   print "datalink: %s" %filter.GetDataLink()
   print "datalink list: %s" %filter.GetDataLinkList()
   filter.Close()
